package com.tom.architect.party4.day34.retrofit;

import com.tom.architect.party4.day34.simple.RequestBuilder;

// 参数处理Handler处理 Query，QueryMap ... 等注解参数。
public interface ParameterHandler<T> {
    void apply(RequestBuilder requestBuilder, T value);

    // 策略。Query，Part，QueryMap,Field...
    class Query<T> implements ParameterHandler<T> {
        private final String key; // 保存的就是参数key=username，password。
        public Query(String key) {
            this.key = key;
        }

        @Override
        public void apply(RequestBuilder requestBuilder, T value) {
            // 添加到request中:  value -> String 要经过一个工厂处理。
            //（源码中用来工厂设计模式 okhttp:ParameterHandler/Query/apply() ）=> valueConverter.convert(value)
            // 泛型转换为string，
            requestBuilder.addQueryName(key, value.toString());
        }
    }
    // Part，QueryMap,Field..........不同策略的处理。他们都遵守相同的模板apply()。
    // ...

}
